package com.adil.base.collections;


/**
 * @description: 合集概念学习 concept 概念
 * @author: Adil
 * @date: 2024/4/24
 * @URl: https://www.runoob.com/java/java-collections.html 菜鸟教程
 */
public class CollectionDemo {
    public static void main(String[] args) {
        // Collection 接口又有 3 种子类型，List、Set 和 Queue，再下面是一些抽象类，最后是具体实现类，常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
        // 集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容：
        // 接口：是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口，是为了以不同的方式操作集合对象
        // 实现（类）：是集合接口的具体实现。从本质上讲，它们是可重复使用的数据结构，例如：ArrayList、LinkedList、HashSet、HashMap。
        // 算法：是实现集合接口的对象里的方法执行的一些有用的计算，例如：搜索和排序，这些算法实现了多态，那是因为相同的方法可以在相似的接口上有着不同的实现。

        // 1. Collection 接口
        // Collection 接口是所有集合类的父接口，它定义了一些通用的方法，如 size()、isEmpty()、contains()、iterator() 等。
        // Collection 接口的子接口有 List、Set 和 Queue，它们分别代表列表、集合和队列。
        // List 接口代表有序的元素集合，可以重复，可以插入和删除元素。
        // Set 接口代表无序的元素集合，不允许重复元素，可以插入和删除元素。
        // Queue 接口代表先进先出（FIFO）的元素集合，可以插入元素，但是只能从队尾删除元素。

        // 2. List 接口
        // List 接口继承自 Collection 接口，它代表有序的元素集合，可以重复，可以插入和删除元素。
        // List 接口有两个主要实现类：ArrayList 和 LinkedList。
        // ArrayList 类是一个动态数组，它可以自动扩容，所以它的效率比 LinkedList 类要高。
        // LinkedList 类是一个双向链表，它的插入和删除操作效率都很高。

        // 3. Set 接口
        // Set 接口继承自 Collection 接口，它代表无序的元素集合，不允许重复元素，可以插入和删除元素。
        // Set 接口有两个主要实现类：HashSet 和 LinkedHashSet。
        // HashSet 类是一个哈希表，它的查找、插入和删除操作的平均时间复杂度是 O(1)。
        // LinkedHashSet 类是一个哈希表和链表的结合体，它的查找、插入和删除操作的平均时间复杂度是 O(1)。

        // 4. Map 接口
        // Map 接口代表键值对集合，它是一个双列集合，其中每个元素都包含一个键和一个值。
        // Map 接口有两个主要实现类：HashMap 和 LinkedHashMap。
        // HashMap 类是一个哈希表，它的查找、插入和删除操作的平均时间复杂度是 O(1)。
        // LinkedHashMap 类是一个哈希表和链表的结合体，它的查找、插入和删除操作的平均时间复杂度是 O(1)。

        // 5. 集合的遍历
        // 集合的遍历可以有多种方式，常用的有：
        // 1. for-each 循环：适用于 Java 5.0 及以上版本。
        // 2. Iterator 接口：适用于 Java 1.2 及以上版本。
        // 3. 增强 for 循环：适用于 Java 1.5 及以上版本。
        // 4. 其他遍历方式：如增强 for 循环、Enumeration 接口等。

        // 6. 集合的排序
        // 集合的排序可以有多种方式，常用的有：
        // 1. Collections.sort() 方法：适用于 List 接口的实现类。
        // 2. Arrays.sort() 方法：适用于数组。
        // 3. Comparator 接口：适用于自定义排序。

        // 7. 集合的同步
        // 集合的同步可以有多种方式，常用的有：
        // 1. Collections.synchronizedXXX() 方法：适用于 List、Set、Map 接口的实现类。
        // 2. Collections.synchronizedList() 方法：适用于 List 接口的实现类。
        // 3. Collections.synchronizedSet() 方法：适用于 Set 接口的实现类。
        // 4. Collections.synchronizedMap() 方法：适用于 Map 接口的实现类。

        // 8. 集合的线程安全
        // 集合的线程安全是指多个线程同时访问集合时，集合的行为和预期不产生不一致的现象。
        // 集合的线程安全是通过锁机制来实现的，锁机制可以保证集合在多个线程间的访问安全。
        // 常用的锁机制有：
        // 1. 同步块：通过 synchronized 关键字来实现同步。
        // 2. 同步方法：通过 synchronized 关键字修饰的方法来实现同步。
        // 3. 读写锁：通过 ReentrantReadWriteLock 类来实现读写锁。
        // 4. 条件变量：通过 Condition 接口来实现条件变量。

        // 9. 集合的性能分析
        // 集合的性能分析可以有多种方式，常用的有：
        // 1. 时间复杂度分析：分析集合的每个操作的平均时间复杂度。
        // 2. 空间复杂度分析：分析集合的存储空间占用。
        // 3. 集合的选择：选择合适的集合类型，可以提高集合的性能。

    }
}
